﻿#ifndef _NNOM_HANDLERS_H_
#define _NNOM_HANDLERS_H_

#include <stdint.h>

#include "mpu6050.h"

typedef enum
{
    NN_STATUS_UNINITIALIZED  = 0,   // 未初始化
    NN_STATUS_INITIALIZED    = 1,   // 初始化
    NN_STATUS_INFER_NOT_DONE = 2,   // 未推理完成
    NN_STATUS_INFER_DONE     = 3,   // 推理完成
} CNN_Status;

typedef enum
{
    IMU_AXIS_X = 0,
    IMU_AXIS_Y,
    IMU_AXIS_Z,
    GYRO_AXIS_MAX
} IMU_Axis_Config;

typedef enum
{
    OUPUT_THRESHOLD = 120,
    IMU_DATA_INPUT_LEN = 300,
} CNN_IMU_Config;

typedef struct CNN_Obj cnn_obj;

struct CNN_Obj
{
    float IMU_Data_mGyro  [IMU_DATA_INPUT_LEN][GYRO_AXIS_MAX];   //欧拉角
    float IMU_Data_mAcc   [IMU_DATA_INPUT_LEN][GYRO_AXIS_MAX];    //加速度
    float IMU_Data_mAngles[IMU_DATA_INPUT_LEN][GYRO_AXIS_MAX]; //角速度

    uint64_t IMU_Data_Index;

    int8_t cnn_result;

    void ( *run )( void );

    mpu6050_Obj* mpu6050;

    CNN_Status status;
};
cnn_obj* create_nnom_Obj( void );

#endif
